const express = require('express');
const mysql = require('mysql2');
const bcrypt = require('bcryptjs');
const session = require('express-session');
const bodyParser = require('body-parser');
const app = express();
const port = 3002;

// 中间件配置
app.use(bodyParser.json());
app.use(express.static('public'));  // 用于提供静态文件

// 配置 session 中间件
app.use(session({
  secret: 'secret_key',  // 用于加密 session ID 的密钥
  resave: false,         // 每次请求都重新保存 session
  saveUninitialized: false,  // 只要有 session 数据就保存
  cookie: { secure: false, maxAge: 60 * 60 * 1000 }  // 不启用 HTTPS 时，secure 设置为 false
}));

// MySQL数据库连接
const db = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: '123456',  // 替换为你自己的数据库密码
  database: 'user_db'  // 替换为你自己的数据库名称
});

db.connect((err) => {
  if (err) {
    console.error('无法连接到数据库: ' + err.stack);
    return;
  }
  console.log('连接到数据库');
});

// 用户注册
app.post('/register', (req, res) => {
  const { username, password, role } = req.body;

  // 密码加密
  bcrypt.hash(password, 10, (err, hashedPassword) => {
    if (err) {
      return res.status(500).json({ message: '服务器错误' });
    }

    // 保存用户到数据库
    db.query('INSERT INTO users (username, password, role) VALUES (?, ?, ?)', [username, hashedPassword, role], (err, results) => {
      if (err) {
        return res.status(500).json({ message: '注册失败' });
      }
      res.status(200).json({ message: '注册成功' });
    });
  });
});

// 用户登录
app.post('/login', (req, res) => {
  const { username, password } = req.body;

  // 查找用户
  db.query('SELECT * FROM users WHERE username = ?', [username], (err, results) => {
    if (err) {
      return res.status(500).json({ message: '服务器错误' });
    }

    if (results.length === 0) {
      return res.status(401).json({ message: '用户名或密码错误' });
    }

    // 检查密码是否匹配
    bcrypt.compare(password, results[0].password, (err, isMatch) => {
      if (err) {
        return res.status(500).json({ message: '服务器错误' });
      }

      if (!isMatch) {
        return res.status(401).json({ message: '用户名或密码错误' });
      }

      // 登录成功，创建 session
      req.session.user = { id: results[0].id, username: results[0].username, role: results[0].role };

      res.status(200).json({ success: true, message: '登录成功' });
    });
  });
});

// 获取用户列表（需要登录验证）
app.get('/users', (req, res) => {
  if (!req.session.user) {
    return res.status(401).json({ message: '未登录或会话已过期' });
  }

  // 检查用户角色是否为管理员
  if (req.session.user.role !== 'admin') {
    return res.status(403).json({ message: '权限不足' });
  }

  // 获取用户列表
  db.query('SELECT id, username FROM users', (err, users) => {
    if (err) {
      return res.status(500).json({ message: '获取用户列表失败' });
    }
    res.status(200).json(users);
  });
});

// 用户登出
app.post('/logout', (req, res) => {
  req.session.destroy((err) => {
    if (err) {
      return res.status(500).json({ message: '登出失败' });
    }
    res.status(200).json({ message: '登出成功' });
  });
});

// 启动服务器
app.listen(port, () => {
  console.log(`服务器正在运行在 http://localhost:${port}`);
});

